文章目標:詳細介紹 Terraform 中的資源概念,以及如何使用資源來定義基礎架構元件。
Resources資源是Terraform 中用來管理基礎架構的基本單位,通過資源定義來描述它們的配置,而狀態配置文件則用於跟蹤和維護每個資源的狀態。這些元素共同使得 Terraform 能夠自動化基礎架構的管理,實現**基礎架構即代碼(Infrastructure as Code)**的概念。
說得這樣複雜,其實資源它本質就是一個麥當勞大麥克,用漢堡、生菜、醬汁、雞肉尬在一起的漢堡。每次我們去麥當勞,起手式就是大麥克或是勁辣雞腿堡點起來。
概念(大麥克漢堡):管理基礎架構的最基本單位,代表基礎架構中的一個單一元件,例如 GCP 的 GKE VM 實例、GCS 存儲桶等等。
資源定義Block 建構模組(大麥克裡面有哪些料):Terraform 會透過提供的**資源定義(resource definition)**來創建、修改或刪除這些資源,從而構建完整的基礎架構。例如:產生一個GCS 存儲桶的資源定義,可以提供不同的配置。
狀態配置文件 terraform.tfstate (大麥克漢堡組裝的流程與步驟):每個資源都有一個唯一的名稱和一組屬性,用於描述該資源的狀態和配置。
在 Terraform 中,Resources 使用 block 的形式進行定義,每個 block 包含以下兩個主要元素:
Type(資源類型):這個元素用於識別 block 的類型,它確定了該 block 的用途和功能。每個資源都有一個唯一的 Type,例如,Google Cloud Platform(GCP)提供者中的 google_storage_bucket block 用於定義 Google Cloud Storage(GCS)存儲桶實例。Type 通常是提供者(Provider)特定的,因為不同的提供者提供不同的資源類型。
Name(資源名稱):這個元素用於給定的資源指定一個名稱,以便在 Terraform 配置中識別和引用該資源。每個資源必須有一個唯一的名稱,這是因為 Terraform 使用名稱來管理和區分不同的資源實例。名稱通常是你在 Terraform 配置中自行指定的,但它必須在特定的 block 內保持唯一。
每個 block 都有一個或多個 block 屬性(block attribute),用於配置和自定義 block 的行為。例如,google_storage_bucket 中可能包含 name、location等屬性。屬性可用於指定資源的細節,如名稱、位置等。
數據結構 TCL AST:Terraform 把所有配置內容組織成一個數據結構,這是內部表示形式,用來管理和操作配置。
內容:數據結構包含了所有模塊(blocks)、屬性以及它們之間的關係,最後產生狀態配置文件 terraform.tfstate。
用途:狀態配置文件讓 Terraform 知道如何處理配置,包括建立、修改或刪除基礎架構資源。
格式:通常使用 HCL 或 JSON 格式來表示這個數據結構。
使用GCP的cloud shell環境,來執行terraform (沒有使用過請參閱Terraform 工作流程)
產生一個GCE 虛擬機器 (Google Compute Engine)
深入瞭解Resources(資源)的使用
創建專案以後,右上角先啟動cloud shell,並選擇使用vscode 編輯器開啟新頁面。
進入vscode 編輯器後,新建或開啟main.tf的檔案,並複製下列程式碼到視窗中,我們要利用這些程式碼練習,可以先輸入練習後,再來回來看代表的意義。
可以到下方的github連結中,下載對應的參考程式碼
首先創建兩個檔案,分別是 provider.tf, main.tf
provider.tf
#########################################
# CONFIGURATION
#########################################
terraform {
# 指定 terraform 的最小版本
required_version = ">=1.0"
required_providers {
# provider 中的最小版本
google = {
source = "hashicorp/google"
version = ">= 4.40.0"
}
}
}
#########################################
# PROVIDERS
#########################################
provider "google" {
# your project name
project = "terraform101-384507"
}
這個檔案主要用於配置 Terraform 的提供者(provider),以確保 Terraform 可以正確地與 Google Cloud Platform(GCP)進行交互。
terraform :這個區塊設定了 Terraform 的版本要求,確保使用的版本符合最低要求大於4.40.0版本。同時,它也定義了所需的提供者和版本。
provider "google" :這個區塊指定了要使用的 GCP 提供,指定了 GCP 專案 ID(由 var.GCP_PROJECT 變數提供)。
main.tf
resource "google_compute_instance" "example" {
name = "example-instance"
machine_type = "e2-micro"
zone = "asia-east1-b"
boot_disk {
initialize_params {
image = "debian-cloud/debian-10"
}
}
network_interface {
network = "default"
access_config {
// Ephemeral IP
}
}
}
這個檔案的用途是定義和創建一個 Google Cloud Platform(GCP)虛擬機器實例。指定了一個 google_compute_instance 資源,名稱為 "example":
name:指定了實例的名稱為 "example-instance"。
machine_type:設定了虛擬機型號為 "e2-micro",這是一種小型虛擬機型。
zone:指定了實例所在的區域為 "asia-east1-b"。
boot_disk:定義了引導磁碟的設定,並使用 "debian-cloud/debian-10" 映像。
network_interface:配置了網路接口,連接到預設網路。
access_config:這個部分可以用來配置外部 IP。
這個 Terraform 配置碼的目的是創建一個 Google Cloud Compute Engine 實例,並定義了實例的名稱、規格、引導磁碟和網路接口等設定。
最後執行 terraform apply -auto-approve來部署對應的資源到雲端架構上,就可以得到下列的結果。
terraform apply -auto-approve
Terraform tip:可以利用下列的 Terraform tip,來增進部署效率。
打開終端機中的 .bashrc or .zshrc 檔案
在文件最下方加入下列指令
執行 source ~/.zshrc 或是 source ~/.bashrc 讓下面的 alias 快捷鍵生效
alias tf="terraform"
alias tfv="terraform validate"
alias tfdp="terraform apply -auto-approve plan.out"
alias tfd="terraform apply -auto-approve"
alias tfr="terraform destroy -auto-approve"
alias tfp="terraform plan -out plan.out"
資源介紹:資源是 Terraform 中管理基礎架構的基本單位,用來描述配置和狀態,例如 GCP 的虛擬機器實例或存儲桶。使用terraform這有助於實現基礎架構即代碼的概念。
資源定義:透過資源定義來建立、修改或刪除資源,就像訂購餐點時選擇配置一樣。
狀態配置文件:每個資源都有一個狀態和配置,這些信息保存在 terraform.tfstate 中。
範例:使用程式碼示範如何在 Terraform 中定義和使用資源,包括創建虛擬機器實例。
實際操作:提供了在 Google Cloud Shell 中使用 Terraform 創建虛擬機器實例的步驟,並介紹了一些操作快捷指令。
Terraform-from-zero-to-hero-10-Lab-GCP-Infrastucture-as-Code — https://github.com/qwedsazxc78/Terraform-from-zero-to-hero-10-Lab-GCP-Infrastucture-as-Code
Terraform-project-best-practice — https://github.com/qwedsazxc78/terraform-project-best-practice
歡迎訂閱我的udemy課程:Terraform 從零開始 - 10+實戰Lab打造GCP雲端自動化架構課程 - https://devops-with-alex.com/go/terraform